#include<iostream>
using namespace std;

// 类和对象
//class Person
//{
//public:
//	void PrintPersonInfo();
//private:
//	char _name[20];
//	char _gender[3];
//	int _age;
//};
//
//void Person::PrintPersonInfo()
//{
//	cout << _name << " " << _gender << " " << _age << " " << endl;
//}

//class Date
//{
//public:
//	// 无参构造
//	/*Date()
//	{}*/
//
//	// 带参构造
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	// 拷贝构造
//	Date(Date& d)// 引用
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//
//private:
//	int _year = 1;// 给缺省值
//	int _month = 1;
//	int _day = 1;
//};
//
//void func(Date d)
//{
//	d.Print();// 传值、传参，要调用拷贝构造
//}
//
//
////typedef int DataType;
////class Stack
////{
////public:
////	// 构造函数
////	Stack(size_t capacity = 3)
////	{
////		cout << "Stack(size_t capacity = 3)" << endl;
////		_array = (DataType*)malloc(sizeof(DataType) * capacity);
////		if (_array == NULL)
////		{
////			perror("malloc fail");
////			return;
////		}
////		_capacity = capacity;
////		_size = 0;
////	}
////
////	void Push(DataType data)
////	{
////		_array[_size] = data;
////		_size++;
////	}
////
////	// 析构
////	~Stack()
////	{
////		cout << "~Stack()" << endl;
////		if (_array != NULL)
////		{
////			free(_array);
////			_array = NULL;
////			_capacity = 0;
////			_size = 0;
////		}
////	}
////
////private:
////	DataType* _array;
////	int _capacity;
////	int _size;
////};
////
////class MyQueue
////{
////private:
////	Stack _st1;
////	Stack _st2;
////	int _size = 0;
////};
//
//int main()
//{
//	//MyQueue q;
//
//	//Date d1(2025, 3, 20);// 调用带参构造
//	//d1.Print();
//	//Date d2;// 调用无参构造
//	//d2.Print();
//
//	//Date d1(2025, 3, 20);// 调用带参构造
//	//d1.Print();
//	//Date d2(d1);// 拷贝构造
//	//d2.Print();
//
//	Date d2(2025, 8, 9);
//	func(d2);
//
//	return 0;
//}


//class Time
//{
//public:
//	// 无参构造
//	Time()
//	{
//		_hour = 1;
//		_minute = 1;
//		_second = 1;
//	}
//	// 拷贝构造
//	Time(const Time& t)
//	{ 
//		_hour = t._hour;
//		_minute = t._minute;
//		_second = t._second; 
//		cout << "Time::Time(const Time& t)" << endl;
//	}
//private:
//	int _hour;
//	int _minute;
//	int _second;
//};
//
//class Date
//{
//private:
//	int _year = 1970;
//	int _month = 8;
//	int _day = 1;
//
//	// 自定义类型
//	Time _t;
//};

//int main()
//{
//	Date d1;//编译器自动生成的无参构造
//	Date d2(d1);// 自动生成拷贝构造
//	// 默认生成的拷贝构造函数，内置类型是按照字节方式直接拷贝，
//	// 而自定义类型是调用其拷贝构造函数完成拷贝的
//	return 0;
//}

//初始化列表
//class Date
//{
//public:
//	Date(int year, int month, int day)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{}
//private:
//	int _year;
//	int _month;
//	int _day;
//};

class A
{
public:
	A(int a)
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}

	A(const A& aa)
		:_a(aa._a)
	{
		cout << "A(const A& aa)" << endl;
	}
private:
	int _a;
};

int main()
{
	A a1(1);// 带参构造
	A a2(a1);//拷贝构造

	A a3 = 3;
	const A& ra = 3;
	return 0;
}